Kotlin Coroutines ব্যবহার করে Multithreading

Mobile App Development - অ্যান্ড্রয়েড ডেভেলপমেন্ট (Android) - Multithreading এবং Background Tasks
312

Kotlin Coroutines Android অ্যাপ্লিকেশনে Multithreading এবং Asynchronous Tasks পরিচালনা করার একটি আধুনিক এবং কার্যকর পদ্ধতি। Coroutines আপনাকে লাইটওয়েট থ্রেড তৈরি করতে এবং সহজেই ব্যাকগ্রাউন্ডে কাজ সম্পন্ন করতে সহায়তা করে, যা অ্যাপ্লিকেশনকে রেসপন্সিভ রাখে এবং UI থ্রেডে লোড কমায়।

Kotlin Coroutines ব্যবহার করে Multithreading

নিচে Kotlin Coroutines ব্যবহার করে Multithreading এবং Background Tasks এর বিস্তারিত আলোচনা এবং উদাহরণ দেওয়া হলো:


১. Coroutines কি?

Coroutines হল একটি লাইটওয়েট থ্রেডিং মেকানিজম যা Async কাজ সম্পন্ন করতে সাহায্য করে। এটি suspend ফাংশন ব্যবহার করে কোড সাসপেন্ড করতে এবং রিজিউম করতে পারে, যা কাজের জটিলতা কমায় এবং কোড আরও পাঠযোগ্য করে তোলে। Coroutines ব্যাকগ্রাউন্ড টাস্ক ম্যানেজ করতে এবং UI থ্রেডকে ব্যস্ত রাখার জন্য উন্নত সমাধান প্রদান করে।


২. Coroutine লাইব্রেরি যোগ করা

Gradle ফাইলে Coroutines লাইব্রেরি যোগ করুন:

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'

৩. Coroutine ব্যবহার করার বেসিক উদাহরণ

Kotlin Coroutines ব্যবহার করে একটি সহজ Async Task চালানো হলো:

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        delay(1000L) // ১ সেকেন্ড অপেক্ষা করে
        println("Hello from Coroutine")
    }
    println("Outside Coroutine")
}

এখানে launch ব্লক ব্যবহার করে একটি Coroutine চালানো হয়েছে এবং delay ফাংশন দিয়ে এটি ১ সেকেন্ডের জন্য সাসপেন্ড করা হয়েছে। runBlocking মূল থ্রেডকে ব্লক করে, যাতে Coroutine শেষ না হওয়া পর্যন্ত কোড এক্সিকিউশন অপেক্ষা করে।


৪. Coroutines Dispatcher: কাজের প্রকার অনুযায়ী থ্রেড নির্বাচন করা

Kotlin Coroutines এ, Dispatchers ব্যবহার করে Coroutine এর কাজ কোন থ্রেডে চলবে তা নির্ধারণ করা যায়।

(ক) Dispatchers.Main: UI কাজের জন্য

UI কাজ এবং UI আপডেটের জন্য Dispatchers.Main ব্যবহার করা হয়। এটি Main Thread এ কাজ সম্পন্ন করে।

GlobalScope.launch(Dispatchers.Main) {
    // UI আপডেট বা কাজ সম্পন্ন করুন
    textView.text = "Updated Text"
}

(খ) Dispatchers.IO: I/O কাজের জন্য

নেটওয়ার্ক কল, ফাইল অপারেশন বা ডেটাবেজ কাজের জন্য Dispatchers.IO ব্যবহার করা হয়।

GlobalScope.launch(Dispatchers.IO) {
    val data = fetchDataFromNetwork()
    withContext(Dispatchers.Main) {
        // UI আপডেট করুন
        textView.text = data
    }
}

withContext(Dispatchers.Main) ব্যবহার করে, Coroutine কে UI থ্রেডে নিয়ে আসা হয়েছে, যাতে UI আপডেট করা যায়।

(গ) Dispatchers.Default: CPU-নিবিড় কাজের জন্য

কমপ্লেক্স এবং CPU-নিবিড় কাজ যেমন ডেটা প্রসেসিং বা অ্যালগরিদম চালানোর জন্য Dispatchers.Default ব্যবহার করা হয়।

GlobalScope.launch(Dispatchers.Default) {
    val result = heavyComputation()
    println("Computation result: $result")
}

৫. Suspend ফাংশন: Coroutine এর মূল ভিত্তি

Suspend ফাংশন Coroutine এর ভিতরে ব্যবহার করা হয় এবং এটি ব্যাকগ্রাউন্ডে কাজ সম্পন্ন করতে সাহায্য করে। Suspend ফাংশন Coroutine এর বাইরে ডিরেক্টলি কল করা যায় না।

উদাহরণ: Suspend ফাংশন তৈরি করা

suspend fun fetchDataFromNetwork(): String {
    delay(2000L) // ২ সেকেন্ড অপেক্ষা করে
    return "Data from network"
}

Suspend ফাংশন Coroutine এর মধ্যে ব্যবহার করা

GlobalScope.launch(Dispatchers.IO) {
    val data = fetchDataFromNetwork()
    withContext(Dispatchers.Main) {
        textView.text = data
    }
}

এখানে fetchDataFromNetwork() ফাংশনটি Coroutine এর ভিতরে কল করা হয়েছে, যা ২ সেকেন্ড অপেক্ষা করে এবং তারপর ডেটা রিটার্ন করে।


৬. CoroutineScope এবং GlobalScope

Kotlin Coroutines এ CoroutineScope ব্যবহার করে Coroutine এর জীবনকাল এবং নিয়ন্ত্রণ নির্ধারণ করা যায়।

  • GlobalScope: এটি অ্যাপ্লিকেশনের লং-লিভড Coroutine তৈরি করে, তবে এটি ব্যবহারে সতর্ক থাকতে হয় কারণ এটি মেমরি লিক সৃষ্টি করতে পারে।
  • CoroutineScope: এটি একটি নির্দিষ্ট কাজ বা লাইফসাইকেলের সাথে বাঁধা থাকে, যা মেমরি এবং রিসোর্স ম্যানেজমেন্টে সাহায্য করে।

উদাহরণ: CoroutineScope ব্যবহার করা

class MyActivity : AppCompatActivity(), CoroutineScope {

    private lateinit var job: Job

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        job = Job()
        launch {
            val data = fetchDataFromNetwork()
            textView.text = data
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        job.cancel() // কাজটি বাতিল করা
    }

    override val coroutineContext: CoroutineContext
        get() = Dispatchers.Main + job
}

এখানে CoroutineScope ব্যবহার করে, Coroutine এর লাইফসাইকেল Activity এর সাথে বাঁধা হয়েছে, যাতে Activity ধ্বংস হলে Coroutine বাতিল হয়ে যায়।


৭. Coroutines এবং Exception Handling

Coroutine এর মধ্যে Exception Handling গুরুত্বপূর্ণ। Exception এর মাধ্যমে আপনার Coroutine যদি ব্যর্থ হয়, তাহলে আপনি সেটিকে হ্যান্ডেল করতে পারেন।

GlobalScope.launch(Dispatchers.IO) {
    try {
        val data = fetchDataFromNetwork()
        withContext(Dispatchers.Main) {
            textView.text = data
        }
    } catch (e: Exception) {
        Log.e("Coroutine", "Error fetching data", e)
    }
}

এখানে try-catch ব্যবহার করে Exception Handling করা হয়েছে, যাতে কোনো ত্রুটি ঘটলে সেটি লোগিং হয়।


৮. Coroutines এবং Lifecycle-Aware কাজ

Android এ lifecycleScope এবং viewModelScope ব্যবহার করে আপনি Coroutine তৈরি করতে পারেন, যা Lifecycle এবং ViewModel এর সাথে সামঞ্জস্যপূর্ণ এবং মেমরি অপ্টিমাইজেশনে সহায়ক।

উদাহরণ: lifecycleScope ব্যবহার করা

class MyActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        lifecycleScope.launch {
            val data = fetchDataFromNetwork()
            textView.text = data
        }
    }
}

উদাহরণ: viewModelScope ব্যবহার করা

class MyViewModel : ViewModel() {
    fun loadData() {
        viewModelScope.launch {
            val data = fetchDataFromNetwork()
            _data.postValue(data)
        }
    }
}

উপসংহার

Kotlin Coroutines একটি আধুনিক এবং কার্যকর উপায়, যা Android অ্যাপ্লিকেশনে Multithreading এবং Background Tasks পরিচালনা করতে সহজ করে তোলে। Dispatchers, Suspend Functions, এবং CoroutineScope ব্যবহার করে আপনি সহজেই ব্যাকগ্রাউন্ড কাজ চালাতে এবং UI আপডেট করতে পারেন। Lifecycle-aware Coroutines (lifecycleScope, viewModelScope) ব্যবহার করে, মেমরি অপ্টিমাইজেশনের সাথে সমন্বয় রেখে কার্যকর অ্যাপ্লিকেশন তৈরি করা সম্ভব।

Content added || updated By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...